/**
 * 数据库操作抽象基类
 * 业务层级：数据访问层
 * 功能说明：定义数据库操作的统一接口，支持连接管理、查询执行和事务处理
 * 架构关系：遵循四层架构设计，为所有数据访问对象提供统一的数据库操作接口
 */
#ifndef DATABASE_H
#define DATABASE_H

#include <QObject>
#include <QVector>
#include <QMap>
#include <QVariant>
#include "databaseconfig.h"  // 依赖配置类

// 数据库操作抽象基类（接口）
class Database : public QObject
{
    Q_OBJECT
public:
    explicit Database(QObject *parent = nullptr);
    virtual ~Database() = default;  // 虚析构函数（确保子类正确析构）

    // 连接数据库（纯虚函数：子类必须实现）
    virtual bool connect(const DatabaseConfig &config) = 0;

    // 断开连接
    virtual void disconnect() = 0;

    // 执行无返回结果的SQL（INSERT/UPDATE/DELETE）
    virtual bool execute(const QString &query, const QVector<QVariant> &params = QVector<QVariant>()) = 0;

    // 执行有返回结果的SQL（SELECT）
    virtual QVector<QMap<QString, QVariant>> query(const QString &query,
                                                  const QVector<QVariant> &params = QVector<QVariant>()) = 0;

    // 事务操作
    virtual bool beginTransaction() = 0;
    virtual bool commitTransaction() = 0;
    virtual bool rollbackTransaction() = 0;

    // 检查连接状态
    virtual bool isConnected() const = 0;

    // 获取最后错误信息
    virtual QString lastError() const = 0;
};

#endif // DATABASE_H
